Hadoop安装与配置(一) (1)Hadoop下载与解压 1)下载对应版本的Hadoop安装包,并上传至hadoop1节点的/home/hadoop/app目录下,安装包所在目录如下所示: [hadoop@hadoop1 app]$ ls hadoop-3.3.1.tar.gz 2)在当前目录下,使用tar 命令解压Hadoop安装包,具体操作如下所示: [hadoop@hadoop1 app]$ tar -zxvf hadoop-3.3.1.tar.gz 3)为了方便管理多版本Hadoop,使用ln命令创建软连接,具体操作如下所示: [hadoop@hadoop1 app]$ ln -s hadoop-3.3.1 hadoop (2)配置Hadoop 在Hadoop安装目录下进入到etc/hadoop目录,修改Hadoop相关配置文件。 1)修改core-site.xml配置文件。 core-site.xml文件主要配置Hadoop的公有属性,具体配置内容如下所示。 [hadoop@hadoop1 hadoop]$ vi core-site.xml fs.defaultFS hdfs://hadoop1:9000 hadoop.tmp.dir /home/hadoop/data/tmp 2)修改hdfs-site.xml 配置文件。 hdfs-site.xml文件主要配置跟HDFS相关的属性,具体配置内容如下所示。 [hadoop@hadoop1 hadoop]$ vi hdfs-site.xml dfs.namenode.name.dir /home/hadoop/data/dfs/name dfs.datanode.data.dir /home/hadoop/data/dfs/data dfs.replication 1 dfs.permissions false 3)修改hadoop-env.sh配置文件。hadoop-env.sh文件主要配置跟hadoop环境相关的变量,这里主要修改JAVA_HOME的安装目录,具体配置内容如下所示。 [hadoop@hadoop1 hadoop]$ vi hadoop-env.sh export JAVA_HOME=/home/hadoop/app/jdk 4)修改mapred-site.xml配置文件。mapred-site.xml 文件主要配置跟MapReduce 相关的属性,这里主要将MapReduce的运行框架名称配置为YARN,具体配置内容如下所示。 [hadoop@hadoop1 hadoop]$ vi mapred-site.xml mapreduce.framework.name yarn yarn.app.mapreduce.am.env HADOOP_MAPRED_HOME=/home/hadoop/app/hadoop mapreduce.map.env HADOOP_MAPRED_HOME=/home/hadoop/app/hadoop mapreduce.reduce.env HADOOP_MAPRED_HOME=/home/hadoop/app/hadoop 5)修改 yarn-site.xml配置文件。 yarn-site.xml文件主要配置跟YARN 相关的属性,具体配置内容如下所示。 [hadoop@hadoop1 hadoop]$ vi yarn-site.xml yarn.nodemanager.aux-services mapreduce_shuffle 6)修改workers配置文件。slaves文件主要配置哪些节点为datanode角色,由于目前搭建的是Hadoop伪分布集群,所以只需要填写当前主机的hostname即可,具体配置内容如下所示。 [hadoop@hadoop1 hadoop]$ vi workers hadoop1 7)配置Hadoop环境变量。在hadoop用户下,添加Hadoop环境变量,具体操作如下所示。 [hadoop@hadoop1 hadoop]$ vi ~/.bashrc JAVA_HOME=/home/hadoop/app/jdk HADOOP_HOME=/home/hadoop/app/hadoop CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$PATH export JAVA_HOME CLASSPATH PATH HADOOP_HOME 使用source命令执行.bashrc文件,才能使Hadoop环境变量生效,具体操作如下所示。 [hadoop@hadoop1 hadoop]$ source ~/.bashrc [hadoop@hadoop1 hadoop]$ hadoop version Hadoop 3.3.1 8)创建Hadoop相关数据目录。在hadoop用户下,创建Hadoop相关数据目录,具体操作如下所示。 [hadoop@hadoop1 hadoop]$ mkdir -p /home/hadoop/data/tmp [hadoop@hadoop1 hadoop]$ mkdir -p /home/hadoop/data/dfs/name [hadoop@hadoop1 hadoop]$ mkdir -p /home/hadoop/data/dfs/data (3)启动Hadoop伪分布集群 1)格式化主节点namenode。在Hadoop安装目录下,使用如下命令对NameNode进行格式化。 [hadoop@hadoop1 hadoop]$ bin/hdfs namenode -format 注意:第一次安装Hadoop集群需要对NameNode进行格式化,Hadoop集群安装成功之后,下次只需要使用脚本start-all.sh一键启动Hadoop集群即可。 2)启动Hadoop伪分布集群。在Hadoop安装目录下,使用脚本一键启动Hadoop集群,具体操作如下所示。 [hadoop@hadoop1 hadoop]$ sbin/start-all.sh 3)查看Hadoop服务进程。通过jps命令查看Hadoop伪分布集群的服务进程,具体操作如下所示。 [hadoop@hadoop1 ~]$ jps 10885 NodeManager 10327 DataNode 10522 SecondaryNameNode 10746 ResourceManager 10171 NameNode 11247 Jps 如果服务进程中包含Resourcemanager、Nodemanager、NameNode、DataNode和SecondaryNameNode等5个进程,这就说明Hadoop伪分布集群启动成功。 4)查看HDFS文件系统。在浏览器中输入http://hadoop1:9870/地址,通过web界面查看HDFS文件系统,具体操作如图1-1示。 图1-1通过web界面查看HDFS文件系统 备注:在windows平台要用hadoop1访问,必须在C:\Windows\System32\drivers\etc\hosts文件中配置,如图1-2所示。 图1-2在hosts文件中配置ip映射 5)查看YARN资源管理系统。在浏览器中输入http://hadoop1:8088/地址,通过web界面查看YARN资源管理系统,具体操作如图1-3所示。 图1-3通过web界面查看YARN资源管理系统 (4)测试运行Hadoop伪分布集群 Hadoop伪分布集群启动之后,我们以Hadoop自带的WordCount案例来检测Hadoop集群环境的可用性。 1)查看HDFS目录。在HDFS shell中,使用ls命令查看HDFS文件系统目录,具体操作如下所示。 [hadoop@hadoop1 hadoop]$ bin/hdfs dfs -ls / 由于是第一次使用HDFS文件系统,所以HDFS中目前没有任何目录和文件。 2)创建HDFS目录。在HDFS shell中,使用mkdir命令创建HDFS文件目录/test,具体操作如下所示。 [hadoop@hadoop1 hadoop]$ bin/hdfs dfs -mkdir /test 3)准备测试数据集。在Hadoop根目录下,新建words.log文件并输入测试数据,具体操作如下所示。 [hadoop@hadoop1 hadoop]$ vi words.log hadoop hadoop hadoop spark spark spark flink flink flink 4)测试数据上传至HDFS。使用put命令将words.log文件上传至HDFS的/test目录下,具体操作如下所示。 [hadoop@hadoop1 hadoop]$ bin/hdfs dfs -put words.log /test 5)运行WordCount案例。使用yarn脚本将Hadoop自带的WordCount程序提交到YARN集群运行,具体操作如下所示。 [hadoop@hadoop1 hadoop]$ bin/yarn jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.1.jar wordcount /test/words.log /test/out 6)查看作业运行状态。在浏览器中输入http://hadoop1:8088/地址,通过web界面查看YARN中作业运行状态,具体操作如图1-4所示。 图1-4通过web界面查看YARN中作业运行状态 如果在YARN 集群的Web界面中,查看到WordCount作业最终的运行状态为SUCCESS,就说明MapReduce程序可以在YARN集群上成功运行。 7)查询作业运行结果。使用cat命令查看WordCount作业输出结果,具体操作如下所示。 [hadoop@hadoop1 hadoop]$ bin/hdfs dfs -cat /test/out/* flink 3 hadoop 3 spark 3 如果WordCount运行结果符合预期值,说明Hadoop伪分布式集群已经搭建成功! 2.2 Hadoop完全分布式环境搭建准备 2.2.1 Linux虚拟机克隆 Linux虚拟机克隆操作步骤如下: (1)如图1-5所示,在VMware中右键点击hadoop1节点,然后选择hadoop1——>管理——>克隆,进入克隆虚拟机向导,点击“下一页”。 图1-5 克隆虚拟机向导 (2)弹出如果1-6所示的克隆源页面,选择“虚拟机中的当前状态”然后点击“下一步”。 图1-6 选择克隆源 (3)弹出如图1-7所示的克隆类型界面,选择“创建见完整克隆”选项,然后点击“下一步”。 图1-7 选择克隆类型 (4)弹出如图1-8所示的界面,我们可以输入虚拟机的名称以及存储位置,然后点击“完成”按钮。 图1-8 输入新虚拟机的名称 (5)弹出如图1-9的克隆进度界面,耐心等待虚拟机克隆进度条完成。 图1-9克隆虚拟机 (6)如图1-10所示,点击“关闭”按钮,完成虚拟机的克隆。 图1-10 完成虚拟机克隆 (7)如图1-11所示,使用与hadoop1相同的账号密码登录hadoop2(用户名:root 密码:123456)。 图1-11 启动登录 2.2.2 网络及工具配置 (1)配置静态IP 配置静态IP步骤如下: 1)如图1-12所示,在命令行输入:vi/etc/sysconfig/network-scripts/ifcfg-ens33命令。 图1-12 配置静态ip(1) 2)如图1-13所示,修改ip地址为192.168.249.162(可根据实际情况配置)。 图1-13 配置静态ip(2) 3)如图1-14所示,使用systemctl restart NetworkManager重启网络服务。 图1-14 重启网络服务 (4)如图1-15所示,输入ping www.baidu.com命令,测试虚拟机是否能够联网,收到回复表示能够联通。 图1-15 测试网络 (2) Xshell连接 Xshell连接步骤如下: 1)如图1-16所示,静态IP地址配置成功之后,可以通过xshell连接克隆之后的虚拟机,在xshell中新建会话,配置好需要连接的虚拟机。 图1-16 配置连接 2)如图1-17所示,然后配置用户身份验证,输入用户名和密码。 图1-17 配置用户身份验证 3)连接配置好的虚拟机,出现图1-18表示连接成功。 图1-18 通过xshell连接 (3) 修改主机名 修改主机名步骤如下: 1)由于是克隆的,主机还是hadoop1,我们需要修改为hadoop2,使用命令vi /etc/hostname修改主机名,具体操作如图1-19所示。 图1-19 修改主机名 2)为了使用主机名进行访问,我们需要配置主机名映射,输入命令vi /etc/hosts配置主机名映射,具体操作如图1-20所示。 图1-20 修改主机名映射 (3)关闭防火墙 关闭防火墙步骤如下: 1)如图1-21所示,使用查看systemctl status firewalld防火墙状态,如果处于“running”状态表示防火墙开启。 图1-21 查看防火墙状态 2)关闭防火墙分两步进行,首先使用命令systemctl stop firewalld停止防火墙,然后使用命令systemctl disable firewalld使防火墙失效,具体操作如图1-22所示。 图1-22 关闭防火墙 注意:由于克隆hadoop1,前面已经关闭防火墙此步骤可以省略,jdk安装也可省略。 (4) FileZilla连接 在FileZilla中新建站点,进行配置,具体操作如图1-23所示。 图1-23 FileZilla连接虚拟机 备注:使用同样步骤克隆hadoop3并配置ip(ip:192.168.249.163)。 (5)配置Hosts文件 1)使用命令vi /etc/hosts配置ip地址映射,具体操作如图1-24所示,(备注:hadoop1、hadoop2、hadoop3节点hosts文件配置一样)。 图1-24 配置Hosts文件 2)测试hadoop1节点访问hadoop2节点,具体操作如图1-25所示。 图1-25 测试节点互访 2.2.3 时钟同步 (1)我们使用命令timedatectl set-timezone "Asia/Shanghai"统一时区为上海时区,具体操作如图1-26所示。 图1-26 统一时区 (2)使用yum -y install chrony命令下载安装 chrony服务,中间遇到提问请输入y,具体操作如图1-27所示。 图1-27 下载安装 chrony (3)编辑 chrony 配置文件 vi /etc/chrony.conf 1. 注释掉: # pool 2.centos.pool.ntp.org iburst 2. 加入新的的时间服务器(可添加多个时间服务器): server ntp.aliyun.com iburst 图1-28 同步时间 (4)重启 chronyd 服务 systemctl restart chronyd (5)设置 chronyd 开机自启 systemctl enable chronyd (6)进行时间同步 chronyc makestep (7)查看时间是否同步 date 为了能够周期性执行时钟同步,我们需要加入定时计划任务,如需要每隔10分钟同步一下时钟,使用crontab -e命令,输入如下内容: 0-59/10 * * * * /usr/bin/chronyc makestep 具体操作如图1-29所示。 图1-29 加入定时任务 备注:3个节点执行一遍。 2.2.4 集群SSH免密登录 (1)各个节点SSH免密登录。SSH(Secure Shell)是可以在应用程序中提供安全通信的一个协议,通过SSH可以安全地进行网络数据传输,它的主要原理就是利用非对称加密体系,对所有待传输的数据进行加密,保证数据在传输时不被恶意破坏、泄露或者篡改。 但是Hadoop集群使用SSH不是用来进行数据传输的,而是在Hadoop集群启动和停止的时候,主节点需要通过SSH协议启动或停止从节点上面的进程。如果不配置SSH免密码免密登录,对Hadoop集群的正常使用没有任何影响,但是在启动和停止Hadoop集群的时候,需要输入每个从节点的密码。可以想象一下,当集群规模比较大的时候,比如达到成百上千节点的规模,如果每次都要分别输入集群节点的密码,这种方法肯定是不可取的,所以要对Hadoop集群进行SSH免密码免密登录的配置。 SSH免密码免密登录的功能跟用户密切相关,为哪个用户配置了SSH,那个用户就具有SSH免密码免密登录的功能,没有配置的用户则不具备该功能,这里选择为hadoop用户配置SSH免密码免密登录。 首先在控制台,使用su命令切换到hadoop用户的根目录,然后使用ssh-keygen -t rsa命令(ssh-keygen是秘钥生成器,-t 是一个参数,rsa 是一种加密算法)生成秘钥对(即公钥文件id_rsa.pub和私钥文件id_rsa)。 由于hadoop1先前已经配置过免密登录,我们直接从hadoop2开始配置(注意是在hadoop用户)配置hadoop2节点免密登录的步骤如下,首先使用su - hadoop命令切换至hadoop用户,然后使用rm -rf .ssh/删除克隆过来的ssh目录,最后通过ssh-keygen -t rsa生成秘钥,具体操作如图1-30所示。 图1-30 生成秘钥 (2)将公钥文件id_rsa.pub 中的内容拷贝到相同目录下的authorized_keys文件中。使用cd .ssh/ 进入ssh目录,使用cp id_rsa.pub authorized_keys复制秘钥到authorized_keys文件,最后通过cat authorized_keys查看秘钥是否复制成功,具体操作如图1-31。 图1-31 拷贝公钥到authorized_keys文件中 (3)切换到hadoop用户的根目录,然后为.ssh目录及文件赋予相应的权限。具体操作如图1-32所示。 图1-32 为.ssh目录及文件赋予相应的权限 (4)使用ssh命令登录hadoop2,第一次登录需要输入yes进行确认,第二次以后登录则不需要,此时表明设置成功,具体操作如图1-33所示。 图1-33 使用ssh登录hadoop2 (5)hadoop3节点按照hadoop2节点一样配置SSH免密登录即可。 (6)配置集群SSH免密登录。为了实现集群节点之间SSH免密登录,我们还需要将hadoop2和hadoop3的公钥id_ras.pub复制到hadoop1中的authorized_keys文件中,具体操作以及命令如图1-24、图1-35所示。 [hadoop@hadoop2 ~]$ cat ~/.ssh/id_rsa.pub | ssh hadoop@hadoop1 'cat >> ~/.ssh/authorized_keys' 图1-34 配置集群SSH免密登录(1) [hadoop@hadoop3 ~]$ cat ~/.ssh/id_rsa.pub | ssh hadoop@hadoop1 'cat >> ~/.ssh/authorized_keys' 图1-35 配置集群SSH免密登录(2) 然后将hadoop1中的authorized_keys文件分发到hadoop2和hadoop3节点,具体操作如图1-36、图1-37所示: [hadoop@hadoop1 .ssh]$ scp -r authorized_keys hadoop@hadoop2:~/.ssh 图1-36 authorized_keys文件分发到hadoop2 [hadoop@hadoop1 .ssh]$ scp -r authorized_keys hadoop@hadoop3:~/.ssh/ 图1-37 authorized_keys文件分发到hadoop3 然后hadoop1节点就可以免密登录hadoop2和hadoop3节点,如图1-38所示。 图1-38 免密登录hadoop2、hadoop3 2.2.5 集群脚本开发 (1)创建tools目录,并准备脚本与配置文件。 (2)首先使用mkdir tools命令创建tools目录,并用ls命令查看,具体操作如图1-39所示。 图1-39 创建tools目录 (3)通过FileZilla上传脚本文件到tools文件夹并使用ls命令查看,具体操作如图1-40、图1-41所示。 图1-40 上传脚本文件 图1-41 查看脚本文件 (4)然后使用vi deploy.conf配置脚本,具体内容为: hadoop1,master,all, hadoop2,slave,all, hadoop3,slave,all, 具体操作如图1-42所示。 图1-42 配置脚本文件 (5)使用 chmod u+x deploy.sh runRemoteCmd.sh命令给脚本授予可执行权限并使用ls命令查看,具体操作如图1-43所示。 图1-43 给脚本授予可执行权限 (6)使用vi ~/.bashrc命令配置脚本环境变量,具体操作如图1-44所示。 图1-44 配置脚本环境变量(1) (7)将内容修改为,如图1-45的内容。 图1-45 配置脚本环境变量(2) (8)使用source ~/.bashrc 使配置生效,具体操作如图1-46所示。 图1-46 配置生效 (9)最后测试运行集群脚本,使用touch words.log创建words.log文件,然后使用deploy.sh words.log /home/hadoop/app slave命令分发文件到hadoop2、hadoop3,具体操作如图1-47所示。 图1-47 测试运行集群脚本 II